/**
 * Axios 请求配置文件
 * 封装了 Axios 实例，配置了请求和响应拦截器
 * 统一处理请求响应和错误情况
 */

import axios from 'axios';

/**
 * 创建 Axios 实例
 * 配置了基础 URL、超时时间和请求头
 * baseURL: 从环境变量获取 API 基础地址
 * timeout: 请求超时时间设置为 5 秒
 * headers: 设置默认的请求头格式
 */
const service = axios.create({
    baseURL: import.meta.env.VITE_API_BASE_URL,
    timeout: 5000,
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
});

/**
 * 请求拦截器
 * 在发送请求之前做一些处理
 * 可以在这里：
 * 1. 添加 token
 * 2. 修改请求头
 * 3. 处理请求参数
 */
service.interceptors.request.use(
    (config) => {
        // 这里可以添加 token 等认证信息
        // console.log(config);
        return config;
    },
    (error) => {
        console.error('请求拦截器出错:', error);
        return Promise.reject(error);
    }
);

/**
 * 响应拦截器
 * 处理服务器返回的数据
 * 统一处理响应状态和错误情况
 */
service.interceptors.response.use(
    (res) => {
        const { status } = res.data;
        /**
         * 根据后端返回的状态码进行不同处理
         * 9999: 成功状态
         * 9001: 服务端错误
         * 8001: 用户业务错误
         * 8002: 医生业务错误
         * 8003: 公共业务错误
         */
        switch (status) {
            case "9999":
                break;
            case "9001":
                console.log("服务端错误");
                break;
            case "8001":
                console.log("用户业务错误");
                break;
            case "8002":
                console.log("医生业务错误");
                break;
            case "8003":
                console.log("公共业务错误");
                break;
        }
        return res;
    },
    (err) => {
        /**
         * 处理 HTTP 错误状态码
         * 400: 请求错误
         * 401: 未授权访问
         * 404: 资源不存在
         * 其他: 其他错误
         */
        if (err && err.response) {
            switch (err.response.status) {
                case 400:
                    console.log("请求错误");
                    break;
                case 401:
                    console.log("未授权访问");
                    break;
                case 404:
                    console.log("资源找不到");
                    break;
                default:
                    console.log("其他错误信息");
            }
        }
        return Promise.reject(err);
    }
);

// 导出封装后的 Axios 实例，供其他模块使用
export default service;
